﻿#pragma once

#include "Reflection/Interface.h"
#include "Containers/SharedObjectPtr.h"

class RObject;
class CInterface;

//对象接口的基类
//所有的对象接口都应该继承这个类
//所有的接口必须以I开头
class WHENGINE_API IObjectInterface
{
public:

    //获取接口的类型
    static CInterface* StaticInterface();

    //获取接口的类型
    virtual CInterface* GetInterface();

    //获取实现接口的对象,不能在构造函数中调用，因为这个函数会调用虚函数
    TSharedObjectPtr<RObject> GetObject()
    {
        return _GetObjectOfInterface();
    }

    //获取实现接口的对象，这个函数会自动被实现
    virtual TSharedObjectPtr<RObject> _GetObjectOfInterface()=0;

};

template<> class WHENGINE_API CGetType<IObjectInterface>
{
public:
    CType* operator () ()
    {
        return IObjectInterface::StaticInterface();
    }
};

